Build a Windows ARM64 wheel - #91
Merged
Merged
Conversation
BelfrySCAD cannot run on Windows on ARM at all: there is no openscad_cpp_evaluator wheel for it, so nothing else about that platform matters. This tries to close that. Cross-compiled on the x86_64 runner rather than built on a windows-11-arm one. bison and flex are host build tools here -- they generate C++ that MSVC then cross-compiles for ARM64 -- and MSYS2, which is where this build gets a bison new enough for the grammar (3.8+; winflexbison3 ships 3.7.4, already confirmed too old by a CI failure), has no native ARM64 build. Building on an ARM runner would mean emulating it. cibuildwheel skips CIBW_TEST_COMMAND for the cross-compiled wheel, since an x86_64 host cannot run an ARM64 one. That is the cost of this approach: the wheel is built but not smoke-tested by CI. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The ARM64 wheel compiles fine on the x86_64 runner -- the failure was in delvewheel, which vendors the MSVC runtime into the wheel and could only find the x86_64 msvcp140.dll on an x86_64 host: "Unable to find library: msvcp140.dll". The ARM64 wheel now excludes the runtime DLLs and leaves them to the system, which is what every Python extension on Windows already assumes (CPython itself requires the redistributable). AMD64 keeps vendoring them, so its wheel is unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
BelfrySCAD cannot run on Windows on ARM at all today: there is no
openscad_cpp_evaluatorwheel for it, so nothing else about that platform matters. PySide6 already shipswin_arm64, so this was the missing piece.Both verified built by an actual
workflow_dispatchrun ofwheels.ymlon this branch, not just reasoned about.Cross-compiled, not built on an ARM runner
bisonandflexare host build tools here — they generate C++ that MSVC then cross-compiles for ARM64. MSYS2, which is where this build gets a bison new enough for the grammar (3.8+; winflexbison3 ships 3.7.4, already proven too old by a past CI failure), has no native ARM64 build, so awindows-11-armrunner would have to emulate it. Cross-compiling onwindows-latestsidesteps that entirely.The one real obstacle
The compile succeeded first time; the failure was in the repair step:
delvewheelvendors the MSVC runtime into the wheel, and on an x86_64 host it can only find the x86_64 copy. The ARM64 wheel now excludes the runtime DLLs and leaves them to the system — which is what every Python extension on Windows already assumes, since CPython itself requires the redistributable. AMD64 keeps vendoring them, so its wheel is unchanged.Known limitation
cibuildwheelskipsCIBW_TEST_COMMANDfor a cross-compiled wheel, because an x86_64 host cannot run an ARM64 one. So the ARM64 wheel is built but not smoke-tested in CI. Testing it needs awindows-11-armrunner, or hardware.Version 0.29.2 → 0.29.3.
🤖 Generated with Claude Code